home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / doc / python-gnome2-desktop / examples / keyring-async.py next >
Encoding:
Python Source  |  2009-03-14  |  3.7 KB  |  115 lines

  1. #!/usr/bin/env python
  2. # -*- mode: python; coding: utf-8 -*-
  3. """
  4. Example showing how to store login/password in gnome keyring
  5. """
  6.  
  7. import gconf
  8. import gnomekeyring
  9. import gtk
  10.  
  11. GCONF_AUTH_KEY = "/apps/gnome-python-desktop/keyring_auth_token"
  12.  
  13. def do_something(login, password):
  14.     print "login: %s; password: %s" % (login, password)
  15.  
  16.  
  17. def get_login_password():
  18.     keyring = gnomekeyring.get_default_keyring_sync()
  19.     auth_token = gconf.client_get_default().get_int(GCONF_AUTH_KEY)
  20.     if auth_token > 0:
  21.         def item_get_info_cb(result, item, data):
  22.             if result is None:
  23.                 secret = item.get_secret()
  24.                 data.append(secret)
  25.             else:
  26.                 print "get_item_info result:", result
  27.             gtk.main_quit()
  28.         data = []
  29.         gnomekeyring.item_get_info(keyring, auth_token, item_get_info_cb, data)
  30.         gtk.main()
  31.         try:
  32.             secret, = data
  33.         except ValueError:
  34.             login = None
  35.             password = None
  36.             auth_token = 0
  37.         else:
  38.             login, password = secret.split('\n')
  39.     else:
  40.         login = None
  41.         password = None
  42.     
  43.     dialog = gtk.Dialog("Enter login", None, 0,
  44.                         (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
  45.                          gtk.STOCK_OK, gtk.RESPONSE_OK))
  46.     dialog.props.has_separator = False
  47.     dialog.set_default_response(gtk.RESPONSE_OK)
  48.  
  49.     hbox = gtk.HBox(False, 8)
  50.     hbox.set_border_width(8)
  51.     dialog.vbox.pack_start(hbox, False, False, 0)
  52.  
  53.     stock = gtk.image_new_from_stock(gtk.STOCK_DIALOG_AUTHENTICATION,
  54.                                      gtk.ICON_SIZE_DIALOG)
  55.     hbox.pack_start(stock, False, False, 0)
  56.  
  57.     table = gtk.Table(2, 2)
  58.     table.set_row_spacings(4)
  59.     table.set_col_spacings(4)
  60.     hbox.pack_start(table, True, True, 0)
  61.  
  62.     label = gtk.Label("_Login")
  63.     label.set_use_underline(True)
  64.     table.attach(label, 0, 1, 0, 1)
  65.     local_entry1 = gtk.Entry()
  66.     local_entry1.set_activates_default(True)
  67.     if login is not None:
  68.         local_entry1.set_text(login)
  69.     table.attach(local_entry1, 1, 2, 0, 1)
  70.     label.set_mnemonic_widget(local_entry1)
  71.  
  72.     label = gtk.Label("_Password")
  73.     label.set_use_underline(True)
  74.     table.attach(label, 0, 1, 1, 2)
  75.     local_entry2 = gtk.Entry()
  76.     local_entry2.set_visibility(False)
  77.     local_entry2.set_activates_default(True)
  78.     if password is not None:
  79.         local_entry2.set_text(password)
  80.     table.attach(local_entry2, 1, 2, 1, 2)
  81.     label.set_mnemonic_widget(local_entry2)
  82.  
  83.     dialog.show_all()
  84.     while 1:
  85.         response = dialog.run()
  86.  
  87.         if response == gtk.RESPONSE_OK:
  88.             login = local_entry1.get_text()
  89.             password = local_entry2.get_text()
  90.             if not login or not password:
  91.                 continue
  92.             def item_create_callback(result, auth_token, user_data):
  93.                 assert user_data == "user data"
  94.                 if result is None:
  95.                     print "result is ok"
  96.                     gconf.client_get_default().set_int(GCONF_AUTH_KEY, auth_token)
  97.                 else:
  98.                     print "result:", result
  99.                 gtk.main_quit()
  100.             auth_token = gnomekeyring.item_create(
  101.                 keyring,
  102.                 gnomekeyring.ITEM_GENERIC_SECRET,
  103.                 "GnomePythonDesktop keyring example, login information",
  104.                 dict(appname="GnomePythonDesktop, sync keyring example"),
  105.                 "\n".join((login, password)), True,
  106.                 item_create_callback, "user data")
  107.             gtk.main()
  108.             return login, password
  109.         else:
  110.             raise SystemExit
  111.  
  112. if __name__ == '__main__':
  113.     login, password = get_login_password()
  114.     do_something(login, password)
  115.